Fix infinite retry when a single host fails with server error #635
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Pre-review checklist
./docs/source/.Description
This PR fixes an infinite retry bug that occurred when executing a query on a single host with the default retry policy. When the query failed with a server error, it would retry infinitely without delays.
Root Cause
In the
_make_query_plan()method incassandra/cluster.py, when a specific host was provided (via thehostparameter), thequery_planwas set to a list[self._host]instead of an iterator. This caused thesend_request()method to iterate over the list from the beginning on each retry attempt, leading to infinite retries.Changes Made
cassandra/cluster.py (line 4550): Changed
self.query_plan = [self._host]toself.query_plan = iter([self._host])to ensure the query plan is an iterator that gets exhausted after one attempt, preventing infinite retries.tests/unit/test_response_future.py: Added a new test
test_single_host_query_plan_exhausted_after_one_retrythat reproduces the bug and verifies the fix prevents infinite retries when a single host fails with a server error.Testing
The changes are minimal and surgical, directly addressing the issue without altering any other functionality.
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.